﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Dlls;
using Persistencia;
using UI.Views.Consultas;

namespace UI.Views.Lancamentos.Financeiro
{
    /// <summary>
    /// Interaction logic for frmContasAPagarLancamento.xaml
    /// </summary>
    public partial class frmContasAPagarLancamento : Window
    {
        private int CodigoAlterarouDeletar = 0;
        private int codigo = 0;
        private ContasAPagarDLL contasApagarDll;
        private APagar apagar;
        private APagarParcela parcela;
        private ApagarParcelasDLL apagarParcelaDLL;
        private CaixaBancoDLL caixaBancoDLL;
        private CaixaBanco caixabanco;
        private Pessoa pessoa;
        private PessoasDLL pessoas;
        private ClasseFinanceira classe;
        private ClasseFinanceiraDLL classeDll;

        public frmContasAPagarLancamento(int codigo)
        {
            InitializeComponent();
            //Contas Apagar e suas Parcelas
            contasApagarDll = new ContasAPagarDLL();
            apagar = new APagar();
            parcela = new APagarParcela();
            apagarParcelaDLL = new ApagarParcelasDLL();
           
            // CaixaBanco
            caixaBancoDLL = new CaixaBancoDLL();
            caixabanco = new CaixaBanco();
            //Pessoas Fisicas e Juridias
            pessoas = new PessoasDLL();
            pessoa = new Pessoa();
            //Classe Financeiras
            classe = new ClasseFinanceira();
            classeDll = new ClasseFinanceiraDLL();
            
            OpcoesBaixa();
            lbBaixado.Visibility = Visibility.Hidden;

            if (codigo != 0)
            {
                CodigoAlterarouDeletar = codigo;
            }
            cbxContaPagadora.ItemsSource = caixaBancoDLL.List().Select(o => o.NomeCaixaBanco);
        }

        public void OpcoesBaixa()
        {
            cbxTipoBaixa.IsEnabled = true;
            cbxContaPagadora.IsEnabled = true;
            txtValorPago.IsEnabled = false;
            txtDataPagamento.IsEnabled = false;
            txtValorRestante.IsEnabled = false;
            txtDocumento.IsEnabled = true;
            txtParcela.IsEnabled = true;
            txtCodForn.IsEnabled = true;
            txtCodClasse.IsEnabled = true;
            txtDataEmissao.IsEnabled = true;
            txtDataVencimento.IsEnabled = true;
            txtValor.IsEnabled = true;
            txtDataPrevisao.IsEnabled = true;
            txtNomeFornecedor.IsEnabled = true;
            txtNomeClasseFinanceira.IsEnabled = true;
        }
    

        public void InsertOrUpdate(object sender, RoutedEventArgs e)
        {
            try
            {
                if (CodigoAlterarouDeletar == 0)
                {
                    //Obtem Codig por NomeCaixa

                    // string nomecaixa = cbxContaPagadora.SelectedItem.ToString();
                    apagar.documento = int.Parse(txtDocumento.Text);

                    parcela.Parcela = int.Parse(txtParcela.Text);
                    //   parcela.CodCaixaBanco = int.Parse(caixaBancoDLL.getCodigoPorNomeCaixaBanco(nomecaixa).Codigo.ToString());
                    apagar.PrevisaoPagamento = Convert.ToDateTime(txtDataPrevisao.Text);
                    apagar.CodigoPessoa = int.Parse(txtCodForn.Text);
                    apagar.DataCompra = Convert.ToDateTime(txtDataEmissao.Text);
                    apagar.CodClasse = txtCodClasse.Text;
                    apagar.DataPagamento = Convert.ToDateTime(txtDataEmissao.Text);
                    apagar.Descricao = txtDescricao.Text;
                    apagar.TotalPagamento = decimal.Parse(txtValor.Text);

                    if (cbxTipoBaixa.SelectedValuePath == "Total")
                    {
                        parcela.TipoPagamento = Char.Parse("T");
                    }
                    else
                    {
                        parcela.TipoPagamento = char.Parse("P");
                    }

                    contasApagarDll.Insert(apagar);
                    MessageBox.Show("Conta gravada com sucesso ");
                    reset(0, this);
                }
                else
                {
                    contasApagarDll.Update(CodigoAlterarouDeletar, apagar);
                }
                apagar = new APagar();
            }
            catch (Exception)
            {

                MessageBox.Show("Registro não pode ser gravado"); ;
            }
        }

        private void BuscarFornecedor(object sender, KeyEventArgs e) 
        {
            
            if (e.Key == Key.Enter)
            {
                if (txtCodForn.Text.Equals(""))
                {
                    global.ReturnPessoa = null;
                    new frmConsultaPadrao("Pessoa").ShowDialog();
                    if (global.ReturnPessoa != null)
                    {
                        txtCodForn.Text = global.ReturnPessoa.Codigo.ToString();
                        txtNomeFornecedor.Text = global.ReturnPessoa.Nome;
                    }

                }
                else if (txtCodForn.Text!="")
                {
                    int codigo;
                    codigo = int.Parse(txtCodForn.Text);

                    Pessoa pessoa = pessoas.getPessoa(codigo);
                    if (pessoa != null)
                    {
                        txtCodForn.Text = Convert.ToString(pessoa.Codigo);
                        txtNomeFornecedor.Text = Convert.ToString(pessoa.Nome);
                    }
                    else
                    {
                        MessageBox.Show("Registro não encontrado, favor verificar");
                    }
                    
                }
            }
        }

        private void BuscarClasseFinanceira(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                if (txtCodClasse.Text.Equals(""))
                {
                    global.ReturnClasseFinanceira = null;
                    new frmConsultaPadrao("Classes").ShowDialog();
                    if (global.ReturnClasseFinanceira != null)
                    {
                        txtCodClasse.Text = global.ReturnClasseFinanceira.Codigo;
                        txtNomeClasseFinanceira.Text = global.ReturnClasseFinanceira.NomeClasse;  
                    }

                }
                     else if (txtCodClasse.Text != "")
                    {
                        string codigo = txtCodClasse.Text;
                        ClasseFinanceira classe = classeDll.getClasse(codigo);
                        if (classe != null)
                        {
                            txtCodClasse.Text = classe.Codigo;
                            txtNomeClasseFinanceira.Text = classe.NomeClasse;
                        }
                        else
                        {
                            MessageBox.Show("Registro não encontrado, favor verificar");
                        }
               
                }
               
            }
        }

        private void Novo(object sender, RoutedEventArgs e)
        {
            reset(0, this);
        }


        private static void reset(int depth, DependencyObject obj)
        {
            // Percorre todos os filhos do objeto visual.
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
                reset(depth + 1, VisualTreeHelper.GetChild(obj, i));

            // Se for um TextBox, limpa.
            if (obj is TextBox)
                ((TextBox)obj).Text = string.Empty;
            if (obj is ComboBox)
                ((ComboBox)obj).Text = string.Empty;
            if (obj is DatePicker)
                ((DatePicker)obj).Text = string.Empty;
        }

        public void Delete(object sender, RoutedEventArgs e) 
        {
            
        }

        private void BaixarConta(object sender, RoutedEventArgs e)
        {
            ValidaTela();
           
        }

        private void ValidaTela()
        {

            cbxTipoBaixa.IsEnabled = true;
            cbxContaPagadora.IsEnabled = true;
            txtValorPago.IsEnabled = true;
            txtDataPagamento.IsEnabled = true;
            txtValorRestante.IsEnabled = true;
            cbxContaPagadora.Focus();
            txtDocumento.IsEnabled = false;
            txtParcela.IsEnabled = false;
            txtCodForn.IsEnabled = false;
            txtCodClasse.IsEnabled = false;
            txtDataEmissao.IsEnabled = false;
            txtDataVencimento.IsEnabled = false;
            txtValor.IsEnabled = false;
            txtDataPrevisao.IsEnabled = false;
            txtNomeFornecedor.IsEnabled = false;
            txtNomeClasseFinanceira.IsEnabled = false;
            txtDescricao.IsEnabled = false;
        }

        private void cbxTipoBaixa_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

            if (cbxTipoBaixa.SelectedIndex == 3)
            {
                lbValorRestante.Visibility = Visibility.Visible;
                txtValorRestante.Visibility = Visibility.Visible;
            }
            else
            {
                lbValorRestante.Visibility = Visibility.Hidden;
                txtValorRestante.Visibility = Visibility.Hidden;
            }
        

        }

        private void Confirmar(object sender, RoutedEventArgs e)
        {
            // Obter codigo por NomeCaixaBanco
            string nomecaixa = cbxContaPagadora.SelectedItem.ToString();
            parcela.CodCaixaBanco = int.Parse(caixaBancoDLL.getCodigoPorNomeCaixaBanco(nomecaixa).Codigo.ToString());
            parcela.CodPagar = apagar.Codigo;
            parcela.DataPagamento = Convert.ToDateTime(txtDataPagamento.Text);
            parcela.Parcela = int.Parse(txtParcela.Text);
            parcela.ValorPago = decimal.Parse(txtValorPago.Text);
            if (cbxTipoBaixa.SelectedIndex == 3)
            {
                parcela.TipoPagamento = char.Parse("T");
            }
            else
            {
                parcela.TipoPagamento = char.Parse("P");
            }
            apagarParcelaDLL.Insert(parcela);
            MessageBox.Show("Conta Baixada ");
            
        }

        private void EditarContasApagar(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                if (txtDocumento.Text != "")
                {
                    CodigoAlterarouDeletar = int.Parse(txtDocumento.Text);
                    if (CodigoAlterarouDeletar != null)
                    {
                        APagar apagar = contasApagarDll.getClasse(CodigoAlterarouDeletar);
                        APagarParcela parcela = apagarParcelaDLL.getClasse(CodigoAlterarouDeletar);

                        if (apagar!=null)
                        {
                            txtDocumento.Text = Convert.ToString(apagar.documento);
                            txtCodForn.Text = Convert.ToString(apagar.CodigoPessoa);
                            txtNomeFornecedor.Text = Convert.ToString(contasApagarDll.getNomePorCodigo(int.Parse(txtCodForn.Text)));
                            txtDescricao.Text = apagar.Descricao;
                            txtDataEmissao.Text = Convert.ToString(apagar.DataCompra);
                            txtDataVencimento.Text = Convert.ToString(apagar.DataPagamento);
                            txtDataPrevisao.Text = Convert.ToString(apagar.PrevisaoPagamento);
                            txtValor.Text = Convert.ToString(apagar.TotalPagamento);
                            txtCodClasse.Text = apagar.CodClasse;
                            if (txtCodClasse.Text != "")
                            {
                                txtNomeClasseFinanceira.Text = contasApagarDll.ReturnNomeClasse(txtCodClasse.Text);
                            }
                            if (parcela != null)
                            {
                                txtParcela.Text = Convert.ToString(parcela.Parcela);
                                txtCodClasse.Text = Convert.ToString(apagar.CodClasse);
                                txtNomeClasseFinanceira.Text = Convert.ToString(apagarParcelaDLL.getNomePorCodigo(txtCodClasse.Text));
                                cbxContaPagadora.Text = apagarParcelaDLL.getNomeCaixa(int.Parse(parcela.CodCaixaBanco.ToString()));
                           
                            }
                        }
                        else
                        {
                            MessageBox.Show("Documento não encontrado , favor verificar o numero digitado");
                        }
                    }
                    
                   
                    }
                else
                {
                    frmConsultaPadrao consultaPadrao = new frmConsultaPadrao("Contas a Pagar");
                    consultaPadrao.Owner = this;
                    consultaPadrao.Show();
                    }

                }
            }
        }


    }

